package pe.edu.upc.dai.grupo4.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import pe.edu.upc.dai.grupo4.model.TipoMovimientoBancario;
import pe.edu.upc.dai.grupo4.utils.ConnectionUtils;
import pe.edu.upc.dai.grupo4.utils.DaoException;

/**
 *
 * @author Tito Luyo Murata
 */
public class TipoMovimientoBancarioDaoImpl implements TipoMovimientoBancarioDao {

    public List<TipoMovimientoBancario> selectPorCodBanco(int CodBanco) {
        List<TipoMovimientoBancario> result = new ArrayList<TipoMovimientoBancario>();
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("{call dbo.usp_TiposMovimientoBancario_SEL_x_codBanco(?)}");
            st.setInt(1, CodBanco);
            rs = st.executeQuery();

            while (rs.next()) {
                result.add(this.getData(rs));
            }
            rs.close();
            st.close();
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return result;
    }

    public TipoMovimientoBancario selectPorCodBancoPorCodTipoMovimientoBancario(int CodBanco, int CodTipoMovimientoBancario) {
        TipoMovimientoBancario result = new TipoMovimientoBancario();
        Connection connection = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        try {
            connection = ConnectionUtils.getConnection();
            st = connection.prepareStatement("{call dbo.usp_TiposMovimientoBancario_SEL_x_codBanco_codTipoMovimientoBancario(?, ?)}");
            st.setInt(1, CodBanco);
            st.setInt(2, CodTipoMovimientoBancario);
            rs = st.executeQuery();

            if (rs.next()) {
                result = this.getData(rs);
            }
        } catch (SQLException e) {
            throw new DaoException(e);
        } finally {
            ConnectionUtils.closeResultSet(rs);
            ConnectionUtils.closeStatement(st);
            ConnectionUtils.closeConnection(connection);
        }
        return result;
    }

    private TipoMovimientoBancario getData(ResultSet rs) throws SQLException {
        TipoMovimientoBancario result = null;
        result = new TipoMovimientoBancario(
                rs.getInt("CodBanco"),
                rs.getInt("CodTipoMovimientoBancario"),
                rs.getString("NombreMovimientoBancario"),
                rs.getInt("CodTipoMovimientoContable"),
                rs.getString("ContraCuentaContable"),
                rs.getInt("TipoDocumentoContable"),
                rs.getString("Estado"));
        return result;
    }
}
